
cmake_minimum_required(VERSION 3.0)
project(CALC)

#-----------------------------------------------------------------------------------------------------------------------
# ********************本节重点学习*******************
# 1.add_library(<静态库名> STATIC <list>)生成静态链接
# 2.add_library(<动态库名> SHARED <list>)生成静态链接
# *************************************************
#-----------------------------------------------------------------------------------------------------------------------
# 搜索添加在当前路径下的所有源文件
# PROJECT_SOURCE_DIR 和 CMAKE_SOURCE_DIR是一样的。
file(GLOB SRC
        ${CMAKE_SOURCE_DIR}/src/*.cpp
        ${CMAKE_SOURCE_DIR}/include/*.h
        #表示当前路径在退一级目录
#        ${CMAKE_SOURCE_DIR}/../include/*.h
)

#-----------------------------------------------------------------------------------------------------------------------
# 长度计算 list(LENGTH <list> <定义变量接收>)
list(LENGTH SRC lsit_len1)
# message打印日志，STATUS固定用法
message(STATUS 列表1的长度为:${lsit_len1})
message(STATUS 添加的源文件有:${SRC})

#-----------------------------------------------------------------------------------------------------------------------
# list(REMOVE_ITEM <list> <不需要的源文件>)
list(REMOVE_ITEM SRC ${PROJECT_SOURCE_DIR}/src/no_use_file.cpp)
# 长度计算 list(LENGTH <list> <定义变量接收>)
list(LENGTH SRC lsit_len2)
# message打印日志，STATUS固定用法
message(STATUS 列表2的长度为:${lsit_len2})
message(STATUS 添加的源文件有:${SRC})

#-----------------------------------------------------------------------------------------------------------------------
# 我们的头文件跟cpp文件不再一级，导致#include "head.h"找不到，因此我们需要包含头文件路径。
# include_directories添加头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)

#-----------------------------------------------------------------------------------------------------------------------
## ************************************以下两部需要分开执行cmake****************************************************
## ******************执行第一个时，需要注释掉第二个；执行第二个时，需要注释掉第一个。会在bin中生成相应的库文件******************
#-----------------------------------------------------------------------------------------------------------------------
## 生成静态库操作
## 指定静态库生成路径
#set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib/lib1)
## 生成静态库
#add_library(calc STATIC ${SRC}) #会生成libcalc.a的文件（lib+输出变量名+.a）

#-----------------------------------------------------------------------------------------------------------------------
# 指定动态库生成路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib/lib2)
# 生成动态库
add_library(calc SHARED ${SRC}) #会生成libcalc.so的文件（lib+输出变量名+.so）


###生成可执行文件
##-----------------------------------------------------------------------------------------------------------------------
##指定可执行文件输出路径，如果不添加就会默认输出到当前路径
#set(EXECUTABLE_OUTPUT_PATH /home/gabriel/mac_disk/cpp_project/cmake/demo_v3/build)
##add_executable(app_demo3 ${SRC})
###-----------------------------------------------------------------------------------------------------------------------

